package com.cook.mapper;

import com.cook.entity.Tags;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cook.vo.recipes.TagsVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
* @author black-white spider
* @description 针对表【tags(食谱标签表)】的数据库操作Mapper
* @createDate 2025-10-27 19:55:23
* @Entity com.cook.entity.Tags
*/
@Mapper
public interface TagsMapper extends BaseMapper<Tags> {
    /**
     * 分页查询标签列表
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 标签列表
     */
    List<TagsVO> selectTagsWithPage(@Param("offset") Integer offset,
                                    @Param("limit") Integer limit);

    /**
     * 查询所有标签列表
     */
    List<TagsVO> selectTags();

    /**
     * 查询标签总数
     * @return 标签总数
     */
    int selectTagsCount();

    /**
     * 根据类型查询标签
     * @param type 标签类型
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 标签列表
     */
    List<TagsVO> selectTagsByType(@Param("type") String type,
                                  @Param("offset") Integer offset,
                                  @Param("limit") Integer limit);

    /**
     * 根据类型查询标签数量
     * @param type 标签类型
     * @return 标签数量
     */
    int selectTagsCountByType(@Param("type") String type);

    /**
     * 插入标签（返回主键）
     * @param tags 标签实体
     * @return 影响行数
     */
    int insertTag(Tags tags);

    /**
     * 根据名称查询标签
     * @param name 标签名称
     * @return 标签信息
     */
    Tags selectTagByName(@Param("name") String name);

    /**
     * 统计不同标签名称的数量
     * @return 标签名称和对应的数量
     */
    @MapKey("name")
    List<Map<String, Object>> countTagsByName();

    /**
     * 根据类型统计标签名称的数量
     * @param type 标签类型
     * @return 标签名称和对应的数量
     */
    @MapKey("type")
    List<Map<String, Object>> countTagsByNameAndType(@Param("type") String type);

}




